// The Vue build version to load with the `import` command
// (runtime-only or standalone) has been set in webpack.base.conf with an alias.
import Vue from 'vue'
import App from './App'
import router from './router'
import './utils/rem'
import Vuex from 'vuex'
Vue.use(Vuex);
Vue.config.productionTip = false;
const FastClick = require('fastclick');
FastClick.attach(document.body);
/* eslint-disable no-new */
import {AjaxPlugin, WechatPlugin} from 'vux'
Vue.use(AjaxPlugin);   // axios
Vue.use(WechatPlugin); //  微信
import VueScroller from 'vue-scroller'
Vue.use(VueScroller);
require('es6-promise').polyfill();
const store = new Vuex.Store({});
const http = Vue.http;
const wx = Vue.wechat;
store.registerModule('vux', { // 名字自己定义
  state: {
    isLoading: false,  // 加载状态
    LoginShow: false,  // 是否要显示登陆组件
    isLogin: false,    // 是否登陆
    isShare: false,    // 分享弹窗
    animate: 'in',     // 切换动画
    adminMsg: {
      role: 2,      // 默认是粉丝
      id: '',       // 用户meb id
      option_id: 0  // 默认0
    },
  },
  mutations: {
    updateLoadingStatus(state, payload) {
      state.isLoading = payload.isLoading
    },
    showLogin(state, payload) {
      state.LoginShow = payload.LoginShow
    },
    loginChange(state, payload) {
      state.isLogin = payload.isLogin
    },
    roleChange(state, payload){
      state.adminMsg = payload.adminMsg
    },
    shareChange(state, payload){// 分享弹窗
      state.isShare = payload.isShare
    },
    animateChange(state, payload){
      state.animate = payload.animate
    }
  }
});
const whiteList = ['/details']; // 不需要登陆的页面
import {getAdminMsg, getConfig, shareCallback} from './api'
var routerArr = [];// 存储路由
router.beforeEach(function (to, from, next) {
  routerArr.push(to.path);//每次push
  // 获取用户信息
  http.get(getAdminMsg(localStorage.getItem('token'))).then(res => {
    if (res.data.error) { // 没登陆
      if (to.path === '/' || whiteList.indexOf(to.path) != -1) { // 要去的页面是白名单页面
        store.commit('showLogin', {
          LoginShow: false
        });
        store.commit('updateLoadingStatus', {
          isLoading: true
        });
        next();
      } else {
        store.commit('showLogin', {
          LoginShow: true
        });
        routerArr.pop();// 删除最后一个
        // 不跳转
        next(false)
      }
    } else {//登陆了
      // 保存角色状态
      store.commit('roleChange', {
        adminMsg: res.data.data,
      });
      // 登陆状态
      store.commit('loginChange', {
        isLogin: true
      });
      store.commit('showLogin', {
        LoginShow: false
      });
      // 加载动画
      store.commit('updateLoadingStatus', {
        isLoading: true
      });
      next()
    }
  });
  if (routerArr[routerArr.length - 3] === to.path) {// 后退
    store.commit('animateChange', {
      animate: 'out' // 变成后退动画
    });
    routerArr.splice(routerArr.length - 2, 2)
  } else {
    store.commit('animateChange', {
      animate: 'in' // 变成前进动画
    });
  }
});

router.afterEach(function (to) {
  store.commit('updateLoadingStatus', {
    isLoading: false
  })
});

// const imgUrl = 'http://test.vote.ivymei.com'; // 测试地址
// const imgUrl = 'http://test.vote.ivymei.com'; // 测试地址
const imgUrl = 'http://vote.ivymei.com'; // 线上地址

Vue.prototype.wxShare = function (title, desc, link) {
  // var link  = encodeURIComponent(link);
  // const url = encodeURIComponent(location.href.split('#')[0]);// 当前url
  // const url = encodeURIComponent(window.location.href.split('#')[0]);
  const url = location.href;
  http.get(getConfig(), {
    params: {
      url: url
    }
  }).then(res => {// 获得签名配置
    var Data = res.data.data;
    // config信息验证后会执行ready方法，所有接口调用都必须在config接口获得结果之后，config是一个客户端的异步操作，
    wx.config({
      debug: false, // 开启调试模式,调用的所有api的返回值会在客户端alert出来，若要查看传入的参数，可以在pc端打开，参数信息会通过log打出，仅在pc端时才会打印。
      appId: Data.appid,   // 必填，公众号的唯一标识
      timestamp: Data.timestamp, // 必填，生成签名的时间戳
      nonceStr: Data.nonceStr,   // 必填，生成签名的随机串
      signature: Data.signature, // 必填，签名，见附录1
      jsApiList: ['onMenuShareAppMessage', 'onMenuShareTimeline'] // 必填，需要使用的JS接口列表，所有JS接口列表见附录2
    });
  });
  wx.ready(() => {
    // 所以如果需要在页面加载时就调用相关接口，则须把相关接口放在ready函数中调用来确保正确执行。对于用户触发时才调用的接口，
    // 则可以直接调用，不需要放在ready函数中。
    wx.onMenuShareAppMessage({ // 分享给朋友
      title: title, // 分享标题
      desc: desc,   // 分享描述
      link: link,   // 分享链接 默认以当前链接
      imgUrl: imgUrl + '/static/images/share.png',// 分享图标
      // 用户确认分享后执行的回调函数
      success: function () {
        if(!window.localStorage.getItem('token')) return;
        var params = new URLSearchParams();
        params.append('token', window.localStorage.getItem('token'));
        params.append('type', 'share');
        http.post(shareCallback(), params).then(res => {
          if (res.data.error == 0) { // 表示当天分享成功
            store.commit('shareChange', {
              isShare: true
            });

          } else {
            return;
          }
        })
      },
      // 用户取消分享后执行的回调函数
      cancel: function () {
        console.log('分享到朋友取消');
      }
    });
    //分享到朋友圈
    wx.onMenuShareTimeline({
      title: title, // 分享标题
      desc: desc,
      link: link,
      imgUrl: imgUrl + '/static/images/share.png',
      // 用户确认分享后执行的回调函数
      success: function () {
        if(!window.localStorage.getItem('token')) return;
        var params = new URLSearchParams();
        params.append('token', window.localStorage.getItem('token'));
        params.append('type', 'share');
        http.post(shareCallback(), params).then(res => {
          if (res.data.error == 0) { // 表示当天分享成功
            store.commit('shareChange', {
              isShare: true
            });
          } else {
            return;
          }
        });
      },
      // 用户取消分享后执行的回调函数
      cancel: function () {
        console.log('分享到朋友圈取消');
      }
    });
  });
};

new Vue({
  el: '#app',
  router,
  store,
  template: '<App/>',
  components: {
    App
  }
});





